package com.example.backend.ai;

import com.alibaba.dashscope.common.Message;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 使用@Service注解将此类标记为Spring服务组件
 * 服务层组件，用于标注业务逻辑层组件，表示该类是业务逻辑层
 */
@Service
/**
 * 使用@Slf4j注解为类自动生成日志记录器
 * 这是Lombok库提供的注解，用于简化日志记录器的创建
 * 可以通过log变量直接使用日志功能，如log.info()、log.error()等
 */
@Slf4j
public class AiCodeHelper {

    /**
     *@Resource注解用于自动注入依赖
     *这是Java EE中常用的注解之一，默认按照byName的方式进行自动注入
     *当找不到与名称匹配的bean时，会退回到byType的方式
     *可以标注在字段或setter方法上
     *属于JSR-250规范，是Java标准的一部分
     */
    @Resource
    private ChatModel qwenChatModel;

    /**
     * 系统消息
     */
    private static final String SYSTEM_MESSAGE="“";

    /**
     * 简单对话,文本消息
     * @param message
     * @return
     */
    public String SimpleChat(String message) {
        SystemMessage systemMessage = SystemMessage.from(SYSTEM_MESSAGE);
        UserMessage userMessage = UserMessage.from(message);
        ChatResponse chatResponse = qwenChatModel.chat(systemMessage,userMessage);
        AiMessage aiMessage = chatResponse.aiMessage();
        log.info("AI 输出：" + aiMessage.toString());
        return aiMessage.text();
    }

    /**
     * 自定义对话，文本消息
     * @param userMessage
     * @return
     */

    public String CustomizeChat(UserMessage userMessage){
        ChatResponse chat = qwenChatModel.chat(userMessage);
        AiMessage aiMessage = chat.aiMessage();
        log.info("AI 输出：" + aiMessage.toString());
        return aiMessage.text();
    }
}

